package com.btb.adapter.model;

import java.math.BigDecimal;
import java.util.Date;
import java.util.Objects;
import java.util.Optional;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

/**
 *
 */
@Builder
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@Data
@ToString
public class TransferRecord {
    private Long id;

    /**
     * 收到事件时的区块高度
     */
    private Long blockNumber;

    /**
     * 交易hash
     */
    private String transactionHash;

    /**
     * 发出地址
     */
    private String fromAddress;

    /**
     * 收取地址
     */
    private String toAddress;

    private String data;

    /**
     * gas费用
     */
    private BigDecimal gasUsed;

    /**
     * 状态
     */
    private String status;

    /**
     * 区块时间
     */
    private String timestamp;

    /**
     * 事件名称
     */
    private String eventName;

    private String payOrderId;

    private String payType;

    private BigDecimal payOrderPrice;

    /**
     * 推送检查结果
     */
    private String notifyCheckResult;

    /**
     * 调用远程确认时间
     */
    private Date notifyTime;

    /**
     * 已推送次数
     */
    private Integer notifyNum;

    /**
     * 调用远程确认时的区块高度
     */
    private Long notifyBlockNumber;

    /**
     * 通知结果
     */
    private String notityStatus;

    /**
     * 推送结果  如果不是成功,加下notify_num小于配置的次数,就一直推,
     */
    private String notifyResult;

    /**
     * 调用远程时的响应
     */
    private String notifyResponse;

    /**
     * 调用远程时携带的参数
     */
    private String notifyParam;

    /**
     * 响应唯一id
     */
    private String notifyRid;

    /**
     * 交易的唯一id由中心化定义，链上通知需要带上
     */
    private String transactionUuid;

    /**
     * 数据创建时间
     */
    private Date createTime;

    /**
     * 修改时间
     */
    private Date updatedTime;

  	public boolean isOk() {
		return Optional.of(this.status).map(x -> Objects.nonNull(x) && Objects.equals("true", x)).orElse(Boolean.FALSE);
	}
}